package done.easy_701_800;

import org.junit.Test;

import static com.study.util.LogUtil.info;

/**
 * 705. Design HashSet 设计哈希集合
 * <p>
 * 不使用任何内建的哈希表库设计一个哈希集合
 * 具体地说，你的设计应该包含以下的功能
 * <p>
 * add(value)：向哈希集合中插入一个值。
 * contains(value) ：返回哈希集合中是否存在这个值。
 * remove(value)：将给定值从哈希集合中删除。如果哈希集合中没有这个值，什么也不做。
 * <p>
 * hash表结构是数组 + 链表
 * ___________________
 * |__|__|__|__|__|__|   <- List
 * ↓  ↓        ↓     ↓
 * ① ⑧       ⑤    ⑥
 * ↓           ↓
 * ②          ⑦
 * ↓
 * ③
 * ↓
 * nil
 * <p>
 * LinkedList
 */
@SuppressWarnings("all")
public class DesignHashSet {

    /**
     * Initialize your data structure here.
     */
    public DesignHashSet() {
        //TODO
    }

    public void add(int key) {
        // TODO
    }

    public void remove(int key) {
        // TODO
    }

    /**
     * Returns true if this set contains the specified element
     */
    public boolean contains(int key) {
        // TODO
        return false;
    }

    @Test
    public void test() {
        DesignHashSet hash = new DesignHashSet();
        hash.add(1);
        info("add(1)");
        hash.add(2);
        info("add(2)");
        info("contains(1):{}", hash.contains(1));
        info("contains(3):{}", hash.contains(3));
        hash.add(2);
        info("add(2)");
        info("contains(2):{}", hash.contains(2));
        hash.remove(2);
        info("remove(2)");
        info("contains(2):{}", hash.contains(2));
    }
}
/*
 * Your MyHashSet object will be instantiated and called as such:
 * MyHashSet obj = new MyHashSet();
 * obj.add(key);
 * obj.remove(key);
 * boolean param_3 = obj.contains(key);
 */









































/*
List<LinkedList<Integer>> list;
int k = 10;   //桶数

// Initialize your data structure here.
public DesignHashSet() {
    list = new ArrayList<>();
    for (int i=0; i<k; i++) {
        list.add(new LinkedList<>());
    }
}

public void add(int key) {
    if (!contains(key))
        list.get(key%k).add(key);
}

public void remove(int key) {
    if (contains(key))
        list.get(key%k).removeFirstOccurrence(key);
}

// Returns true if this set contains the specified element
public boolean contains(int key) {
    List<Integer> l = list.get(key%k);
    for (int i:l) {
        if (i==key)
            return true;
    }
    return false;
}
*/
